package de.tabuma.ssoclient.logik;

import java.util.*;
import de.tabuma.ssoclient.entity.GroupPrivileg;

/**
 *
 * @author alefen
 */
public class GroupPrivilegHashFacade {
    private static Hashtable<String,List<GroupPrivileg>> hash = new Hashtable<String, List<GroupPrivileg>>();

    public synchronized static void put(GroupPrivileg groupPrivileg, String ssoId) {
        Enumeration<String> enu = hash.keys();
        boolean add = false;
        while(enu.hasMoreElements()) {
            String key = enu.nextElement();
            if(key.indexOf(ssoId)!=-1) {
                List<GroupPrivileg> gpList = hash.get(key);
                boolean add1 = false;
                for(int i=0;i<gpList.size();i++) {
                    GroupPrivileg gpElement = gpList.get(i);
                    if(gpElement.getId().intValue()==groupPrivileg.getId().intValue()) {
                        gpList.set(i, groupPrivileg);
                        i = gpList.size();
                        add = true;
                        add1 = true;
                        hash.put(key, gpList);
                    }
                }
                if(!add1) {
                    gpList.add(groupPrivileg);
                    hash.put(key, gpList);
                    add = true;
                }
            }
        }
        if(!add) {
            List<GroupPrivileg> gpList1 = new ArrayList<GroupPrivileg>();
            gpList1.add(groupPrivileg);
            List<GroupPrivileg> gpList2 = new ArrayList<GroupPrivileg>();
            gpList2.add(groupPrivileg);
            hash.put(ssoId+"_group"+groupPrivileg.getGroupId(), gpList1);
            hash.put(ssoId+"_privileg"+groupPrivileg.getPrivilegId(), gpList2);
        }
    }

    public synchronized static void remove(int id, String ssoId) {
        Enumeration<String> enu = hash.keys();
        while(enu.hasMoreElements()) {
            String key = enu.nextElement();
            if(key.indexOf(ssoId)!=-1) {
                List<GroupPrivileg> gpList = hash.get(key);
                for(int i=0;i<gpList.size();i++) {
                    GroupPrivileg gpElement = gpList.get(i);
                    if(gpElement.getId().intValue()==id) {
                        gpList.remove(i);
                        i = gpList.size();
                        hash.put(key, gpList);
                    }
                }
            }
        }
    }

    public synchronized static List<GroupPrivileg> getList1(int groupId, String ssoId) {
        return hash.get(ssoId+"_group"+groupId);
    }

    public synchronized static void setList1(int groupId, List<GroupPrivileg> gpList, String ssoId) {
        hash.put(ssoId+"_group"+groupId, gpList);
    }

    public synchronized static List<GroupPrivileg> getList2(int groupId, String ssoId) {
        return hash.get(ssoId+"_privileg"+groupId);
    }

    public synchronized static void setList2(int privilegId, List<GroupPrivileg> gpList, String ssoId) {
        hash.put(ssoId+"_privileg"+privilegId, gpList);
    }

    public synchronized static GroupPrivileg get(int id, String ssoId) {
        Enumeration<String> enu = hash.keys();
        while(enu.hasMoreElements()) {
            String key = enu.nextElement();
            if(key.indexOf(ssoId)!=-1) {
                List<GroupPrivileg> gpList = hash.get(key);
                for(int i=0;i<gpList.size();i++) {
                    GroupPrivileg gpElement = gpList.get(i);
                    if(gpElement.getId().intValue()==id) {
                        return gpElement;
                    }
                }
            }
        }
        return null;
    }
}
